package com.zetor.ms.core.base;

import com.zetor.ms.core.bo.Result;
import com.zetor.ms.core.util.HisResultUtil;
import com.zetor.ms.core.util.LogUtils;
import com.zetor.ms.core.util.MsgUtils;
import org.apache.commons.lang.StringUtils;

/**
 * Base controller，实现Facade层通用方法
 *
 * @Author zlc
 * @Date 2021/12/16
 */
public class BaseController {
    /**
     * 成功处理前缀
     */
    private final String SUCCESS_PREFIX = "info.";

    /**
     * 结果集封装
     * @return
     */
    protected Result<Void> result() {
        return result(null);
    }

    /**
     * 结果集封装
     * @param msgCode 消息code，参考【messages.properties】配置文件
     * @return
     */
    protected <T> Result<T> result(String msgCode) {
        return result(msgCode, null);
    }

    /**
     * 结果集封装
     * @param msgCode 消息code，参考【messages.properties】配置文件
     * @param data 返回body数据体
     * @return
     */
    protected <T> Result<T> result(String msgCode, T data) {
        Result<T> result = new Result<>();
        if (StringUtils.isBlank(msgCode)) {
            HisResultUtil.success(result, "", data);
            return result;
        }
        if (msgCode.startsWith(SUCCESS_PREFIX)) {
            HisResultUtil.success(result, MsgUtils.get(msgCode), data);
        } else {
            String msg = MsgUtils.get(msgCode);
            LogUtils.error(msg);
            HisResultUtil.failure(result, msg, "", data);
        }
        return result;
    }

    /**
     * 自定义消息错误返回
     * @param msg 消息提示内容，非msgCode
     * @return
     */
    protected <T> Result<T> failed(String msg) {
        Result<T> result = new Result<>();
        HisResultUtil.failure(result, msg, "", null);
        return result;
    }

}
